'use strict'
import { Application } from 'egg'
const order = (app: Application) => {
  const { STRING, INTEGER } = app.Sequelize
  // primaryKey  是否唯一值，一般用id
  // autoIncrement  是否自动增加，一般id字段用
  // allowNull  是否为空  默认false可以不为空
  const Order = app.model.define(
    'order',
    {
      id: {
        type: INTEGER, // INTEGER就是mysql中的int
        primaryKey: true,
        autoIncrement: true, // 自动增长
      },
      user_id: INTEGER,
      product_id: INTEGER,
      order_no: STRING(20),
    },
    {
      // tableName: 'users',
      freezeTableName: true, // 只要你使用了freezeTableName，程序就不会自动给你加上s了
      // timestamps: false, // 去除createAt updateAt
      createdAt: true, // 是否启用created_at
      updatedAt: false, // 表示不启用updated_at
      // 使用自定义表名之后上面写的users就直接就是你的表名，如果不加的话，你就可以写user，但是自己的表名为users，程序会自动将s加上
    },
  )

  // 如果不这样，赋值order为any会报错
  const OrderModal = Order as any
  OrderModal.associate = function () {
    // 关联查询出对应User的信息，可在service order getOrderList 查看相关请求代码
    app.model.Order.belongsTo(app.model.User, {
      foreignKey: 'user_id', // 这个填当前表关联的字段
      targetKey: 'id', // 这个是目标表的字段
      as: 'user_info', // 最终查到的信息会放在user_info这个字段里
    })

    // 关联商品信息，这次没有as别名
    app.model.Order.belongsTo(app.model.Product, {
      foreignKey: 'product_id', // 这个填当前表关联的字段
      targetKey: 'id', // 这个是目标表的字段
    })
  }
  return Order
}
export default order
